/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cliente;

import estoque.EstoqueDeProdutos;
import estoque.Produto;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Gustavo
 */
public class Carrinho {
    
    private List<Produto> compras;
    private List<String> estado;
    private List<Integer> quantidade;
    private EstoqueDeProdutos estoque;

    public Carrinho() {
        this.compras = new ArrayList<>();
        this.estado = new ArrayList<>();
        this.quantidade = new ArrayList<>();
        //Refatorar aqui também.... 
        this.estoque = new EstoqueDeProdutos();
        
        
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    int len = compras.size();
                    for (int i = 0; i < len; i++) {
                        proximoEstado(i);
                    }
                    try {
                        Thread.sleep(15000);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(Carrinho.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        }).start();
        
    }
    
    
    public void adicionarNoCarrinho(Produto p, int quantidade){
        this.compras.add(p);
        this.estado.add("esperando pagamento");
        this.quantidade.add(new Integer(quantidade));
    }
    
    public String getEstadoDaCompra(int index) throws IndexOutOfBoundsException{
        return this.estado.get(index);
    }
    
    public List<Produto> getCompras(){
        return compras;
    }
    
    public boolean cancelarCompra(int index) throws IndexOutOfBoundsException{
        if(this.estado.get(index).equals("esperando pagamento")){
            Produto p = this.compras.remove(index);
            this.estado.remove(index);
            int quant = this.quantidade.remove(index).intValue();
            this.estoque.reabastecerEstoque(p.getId(), quant);
            return true;
        }else{
            return false;
        }
    }
    
    public boolean avaliarProduto(int index) throws IndexOutOfBoundsException{
        if(this.estado.get(index).equals("entregue em prazo de troca")){
            return true;
        }else if(this.estado.get(index).equals("entregue fora do prazo de troca")){
            return true;
        } else{
            return false;
        }
    }
    
    public int verificarTempoRestante(int index) throws IndexOutOfBoundsException{
        if(this.estado.get(index).equals("separando para entrega")){
            return 10;
        }else if(this.estado.get(index).equals("em transporte")){
            return 5;
        }
        return -1;
    }
    
    public boolean trocarProduto(int index) throws IndexOutOfBoundsException{
        if(this.estado.get(index).equals("entregue em prazo de troca")){
            this.estado.set(index, "entregue fora do prazo de troca");
            return true;
        }else{
            return false;
        }
        
    }
    
    
    private void proximoEstado(int index) throws IndexOutOfBoundsException{
        String estadoAtual = this.estado.get(index);
        if(estadoAtual.equals("esperando pagamento")){
            this.estado.set(index, "separando para entrega");
        }else if(estadoAtual.equals("separando para entrega")){
            this.estado.set(index, "em transporte");
        }else if(estadoAtual.equals("em transporte")){
            this.estado.set(index, "entregue em prazo de troca");
        }else if(estadoAtual.equals("entregue em prazo de troca")){
            this.estado.set(index, "entregue fora do prazo de troca");
        }
    }
    
    
}
